/**
 * 中间事件键
 * 主要应用与React非关系组件之间的出发事件，传递数据
 * @autho allan5945@163.com 2018-06-01
 * */
function Event() {
    this.eventList = new Object();
}
/**
 * 生成随机字符串方法
 * @param {Number} len 生成字符串的长度
 * @return {String} pwd 返回一个字符串
 * @version 1.0.0
 * @autho allan5945@163.com 2018-06-01
 * */
Event.prototype.randomString = function(len) {
    len = len || 32;
    var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
    var maxPos = $chars.length;
    var pwd = '';
    for (var i = 0; i < len; i++) {
        pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
    }
    return pwd;
};
/**
 * 移除监听的事件
 * @param {String} a 对应obj的键字符串
 * @return void 无返回值
 * @version 1.0.0
 * @autho allan5945@163.com 2018-06-01
 * */
Event.prototype.removeEventListener = function(a){
    for(var key in this.eventList){
        if(a === key){
            delete this.eventList[key];
            break;
        }
    }
};
/**
 * 添加监听的事件
 * @param {String} type 对应emit的类型
 * @param {function} fun 接受通知方法
 * @return {String} randomString 对应obj的键字符串
 * @version 1.0.0
 * @autho allan5945@163.com 2018-06-01
 * */
Event.prototype.addEventListener = function(type,fun){
    var randomString = this.randomString();
    while (this.eventList.hasOwnProperty(randomString)){
        randomString = this.randomString();
    }

    if(!this.eventList.hasOwnProperty(randomString)){
        this.eventList[randomString] = {
            fun:fun,
            type:type
        };
    }
    return randomString;
};
/**
 * 派发事件
 * @param {String} type 派发事件的类型
 * @param {object} data 传递的数据
 * */
Event.prototype.emit = function emit(type,data){
    for(var key in this.eventList){
        if(type === this.eventList[key].type){
            this.eventList[key].fun(data)
        }
    }
};

module.exports = Event;
